package net.sinodata.smartframework.schedulejob.test;

import net.sinodata.smartframework.schedulejob.job.HelloJob;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.stereotype.Component;

@Component
public class Demo {
    public static final String COUNT = "count";

    public static int num = 1;

    public static void main(String[] args) throws SchedulerException {


        // 方式一：创建一个调度器工厂实例
        // SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        // Scheduler scheduler1 = schedulerFactory.getScheduler();
        // 方式二：从调度器工厂中获取默认的调度器实例
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        // 启动调度器
        scheduler.start();
//
//        // 构建任务详情
        JobDetail jobDetail = JobBuilder
                // 创建一个任务详情对象，指定任务类
                .newJob(HelloJob.class)
                // 设置任务的标识符，包括名称和组名
                .withIdentity("HelloJob", "jobGroup1")
                // 将变量num的值作为数据传递给任务
                .usingJobData(COUNT, num)
                .build();

        // 各种builder的基本使用：
//        // 1。
//        SimpleScheduleBuilder simpleScheduleBuilder = SimpleScheduleBuilder
//                .simpleSchedule()
//                .repeatForever()  // 重复执行
//                .withIntervalInSeconds(3); // 3秒
        // 2.
         CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder
                .cronSchedule("*/5 * * * * ?");
//        // 3.
//        CalendarIntervalScheduleBuilder calendarIntervalScheduleBuilder = CalendarIntervalScheduleBuilder
//                .calendarIntervalSchedule()
//                .withInterval(3, DateBuilder.IntervalUnit.SECOND);
//        // 4.
//        DailyTimeIntervalScheduleBuilder dailyTimeIntervalScheduleBuilder = DailyTimeIntervalScheduleBuilder
//                .dailyTimeIntervalSchedule()
//                .withIntervalInSeconds(3);

        // 构建触发器
        Trigger trigger = TriggerBuilder
                // 创建一个触发器对象
                .newTrigger()
                // 设置触发器的标识符，包括名称和组名
                .withIdentity("testJob", "jobGroup1")
                .withSchedule(cronScheduleBuilder)
                .startNow()
                .build();

        // 调度器管理
        scheduler.scheduleJob(jobDetail, trigger);
    }
}
